package editorsvg.editor.formas;

import editorsvg.propiedades.GrupoPropiedades;
import editorsvg.propiedades.PropiedadNumericaReal;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Point2D;

/**
 * Forma que representa un circulo.
 * @author Jorge Berjano
 */
public class Circulo extends Forma {

    private Double cx;
    private Double cy;
    private Double radio;
    private Ellipse2D elipse = new Ellipse2D.Double();
    private GrupoPropiedades grupoPropiedades;

    @Override
    public String getNombreTag() {
        return "circle";
    }
    
    @Override
    public Shape getShape() {
        actualizar();
        return elipse;
    }

    @Override
    public void actualizar() {
        if (cx != null && cy != null && radio != null) {
            elipse.setFrameFromCenter(cx, cy, cx + radio, cy + radio);
        }
    }

    public void setCentro(Point2D centro) {
        setCx(centro.getX());
        setCy(centro.getY());
    }

    public Point2D getCentro() {
        return new Point2D.Double(cx, cy);
    }

    public Double getCx() {
        return cx;
    }

    public void setCx(Double cx) {
        this.cx = cx;
    }

    public Double getCy() {
        return cy;
    }

    public void setCy(Double cy) {
        this.cy = cy;
    }

    public Double getRadio() {
        return radio;
    }

    public void setRadio(Double radio) {
//        if (!radio.equals(this.radio)) {
//            actualizar();
//        }
        this.radio = radio;
    }

    public GrupoPropiedades obtenerPropiedades() {
        if (grupoPropiedades == null) {
            grupoPropiedades = new GrupoPropiedades("Circulo");
            grupoPropiedades.agregarPropiedad(new PropiedadNumericaReal(this, "cx"));
            grupoPropiedades.agregarPropiedad(new PropiedadNumericaReal(this, "cy"));
            grupoPropiedades.agregarPropiedad(new PropiedadNumericaReal(this, "radio", "r"));
        }
        return grupoPropiedades;
    }
}
